#include <stdlib.h>
#include <string.h>
#include <math.h>
#include "maquinaVirtual.h"
#include "reposicaoPagina.h"
#include "io.h"

void inicializaMaquinaVitual(char *metodo, char* entrada, unsigned pagina, unsigned memoria)
{
	imprimeIniciaExecucao();
	Estatisticas estatistica;
	iniciaEstatistica(&estatistica, metodo, entrada, pagina, memoria);

	if (strcmp(metodo, "lru") == 0)
	{
		reposicaoPaginaPorLRU(&estatistica);
	}
	else if (strcmp(metodo, "fifo") == 0)
	{
		reposicaoPaginaPorFIFO(&estatistica);
	}
	else if (strcmp(metodo, "random") == 0)
	{
		reposicaoPaginaRandom(&estatistica);
	}
	else
	{
		imprimeErroMetodoSubstituicao();
	}
}

unsigned numeroPagina(unsigned addr, unsigned pageSize)
{
	unsigned tmp;
	tmp = log2(pageSize * 1024);
	return (addr >> tmp);
}

void inicializaPagina(Pagina *pagina, int numeroDePaginas)
{
	int i;
	for(i = 0; i < numeroDePaginas; i++)
	{
		pagina[i].dirtyBit = -1;
		pagina[i].numPagina = -1;
		pagina[i].tempo = -1;
	}
}
